/**
 * 自定义方法：
 *  自定义方法的基本格式：
 *  
 *  返回类型 方法名称（参数1，参数2,...){
 *    方法体
 *    return 返回值;
 * }
 */
void printInfo() {
  print('我是一个自定义方法');
}

int getNum1() {
  var myNum = 123;
  return myNum;
}

String printUserInfo() {
  return 'this is str';
}

/**
 * 中括号参数表示可选参数
 */
String printUserInfo1(String userName, [String sex = '男', int age]) {
  if (age != null) {
    return "姓名：$userName -- 性别：$sex-- 年龄：$age";
  }
  return "姓名：$userName --性别：$sex -- 年龄：保密";
}

//5.定义一个命名参数的方法
String printUserInfo2(String userName, {String sex = '男', int age}) {
  if (age != null) {
    return "姓名：$userName -- 性别：$sex-- 年龄：$age";
  }
  return "姓名：$userName --性别：$sex -- 年龄：保密";
}

void main(List<String> args) {
  print('调用系统内置的方法');
  printInfo();

  int getNum() {
    var myNum = 123;
    return myNum;
  }

  var n = getNum();
  print(n);

  var n1 = getNum1();
  print(n1);
  var str = printUserInfo();
  print(str);

  String str1 = printUserInfo1("曾卓", '女');
  print(str1);
  String str2 = printUserInfo2("曾卓", age: 20);
  print(str2);

  //6.实现一个把方法当做参数的方法
  fn1() {
    print("fn1");
  }

  fn2(fn) {
    fn();
  }

  fn2(fn1);
}
